package com.itheima.dao;

import com.github.pagehelper.Page;
import com.itheima.pojo.Menu;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 角色接口层
 * @author wangxin
 * @version 1.0
 */
public interface RoleDao {

    Set<Role> findRolesByUserId(Integer userId);

    // 1.*角色分页查询
    Page<Role> selectByCondition(String queryString);


    // 2.*角色管理-添加角色
    void add(Role role);

    // 2.1*添加角色时查询所有权限
    List<Permission> findAllPermission();

    // 2.1*添加角色时查询所有菜单
    List<Menu> findAllMenu();

    // 2.2.*添加-角色与权限中间表记录
    void setRoleAndPermission(Map<String, Integer> map);

    // 2.3.*添加-角色与菜单中间表记录
    void setRoleAndMenu(Map<String, Integer> map);


    // 3.1*编辑角色-回显角色
    Role findById(Integer roleId);

    // 3.2*编辑角色-回显权限ids
    List<Integer> findPermissionIdsByRoleId(Integer roleId);

    // 3.2*删除角色表与权限表记录(中间表)
    void deleteAssociationRoleAndPermission(Integer id);

    // 3.3*编辑角色-回显菜单ids
    List<Integer> findMenuIdsByRoleId(Integer roleId);

    // 3.3*删除角色表与菜单表记录(中间表)
    void deleteAssociationRoleAndMenu(Integer id);

    // 3.4*编辑角色表
    void updateRole(Role role);


    // 4.1*查询角色和权限中间表是否存在数据
    Integer findRoleAndPermissionCountByRoleId(Integer roleId);

    // 4.2*查询角色和菜单中间表是否存在数据
    Integer findRoleAndMenuCountByRoleId(Integer roleId);

    // 4.3*删除角色
    void deleteById(Integer roleId);

    /**
     * 查询所有的role集合
     * @return
     */
    List<Role> findAll();
}
